// -----------------------------
// Author: 		Dhaenens Gert 
// Creation: 	2/17/2015 7:52:53 PM				
// -----------------------------

#ifndef _BaseState_h
#define _BaseState_h

#include "Common.h"

namespace Flow
{

	class SpriteBatch;

	class BaseState
	{
	public:
		virtual ~BaseState();

		virtual void			OnAdd();
		virtual void			OnRemove();

		virtual void			OnPushOrSwap();
		virtual void			OnPop();

		virtual void			Update(Float deltaTime);
		virtual void			Draw(SpriteBatch* lpSpriteBatch);

		const string&			GetName() const;
		StateDrawOption::Enum	GetDrawOption() const;
		StateUpdateOption::Enum	GetUpdateOption() const;

	protected:

		BaseState(const string& name, StateDrawOption::Enum renderOption = StateDrawOption::BlockDrawBelow, StateUpdateOption::Enum updateOption = StateUpdateOption::BlockUpdateBelow);

	private:

		string					m_Name;
		StateDrawOption::Enum	m_DrawOption;
		StateUpdateOption::Enum	m_UpdateOption;

		BaseState(const BaseState& refBaseState);
		BaseState& operator=(const BaseState& refBaseState);
	};

}

#endif